.\" t
.\" @(#)@PACKAGE@-@VERSION@ @RELDATELONG@
.de EX		\"Begin example
.ne 5
.if n .sp 1
.if t .sp .5
.nf
.in +.5i
..
.de EE
.fi
.in -.5i
.if n .sp 1
.if t .sp .5
..
.TH FvwmCpp 1 "@RELDATELONG@ (@VERSION@)" Fvwm "Fvwm Modules"
.UC
.SH NAME
FvwmCpp \- the Fvwm  Cpp pre-processor
.SH SYNOPSIS
Module FvwmCpp [options] filename

The FvwmCpp module can only be invoked by fvwm.
Command line invocation of the FvwmCpp module will not work.

.SH DESCRIPTION
When fvwm executes the FvwmCpp module,
FvwmCpp invokes the cpp pre-processor on the file
specified in its invocation, then FvwmCpp causes fvwm to
execute the commands in the resulting file.

.SH INVOCATION
FvwmCpp can be invoked as a module using an fvwm command,
from the .fvwm2rc file, a menu,
mousebinding, or any of the many other ways fvwm commands
can be issued.

If the user wants his entire .fvwm2rc file pre-processed with FvwmCpp,
then fvwm should be invoked as:

.EX
fvwm -cmd "Module FvwmCpp .fvwm2rc"
.EE

Note that the argument to the option "-cmd" should be enclosed
in quotes, and no other quoting should be used.

When FvwmCpp runs as a module, it runs asynchronously
from fvwm.
If FvwmCpp is invoked from the .fvwm2rc,
the commands
generated by FvwmCpp
may or may not be executed by the time
fvwm processes the next command in the .fvwm2rc.
Invoke FvwmCpp this way for synchronous execution:

.EX
ModuleSynchronous FvwmCpp -lock filename
.EE

.SH OPTIONS
Some options can be specified following the modulename:
.TP
-cppopt \fIoption\fP
Lets you pass an option to the cpp program.  Not really needed as any unknown
options will be passed on automatically.

.TP
-cppprog \fIname\fP
Instead of invoking "/usr/lib/cpp", fvwm will invoke \fIname\fP.

.TP
-outfile \fIfilename\fP
Instead of creating a random unique name for the temporary file for
the preprocessed rc file, this option will let you specify the name of
the temporary file it will create.  Please note that FvwmCpp will attempt
to remove this file before writing to it, so don't point it at anything
important even if it has read-only protection.

.IP -debug
Causes the temporary file create by Cpp to
be retained. This file is usually called "/tmp/fvwmrcXXXXXX"

.IP -lock
If you want to use this option you need to start FvwmCpp with
ModuleSynchronous. This option causes fvwm to wait that the pre-process
finish and that FvwmCpp asks fvwm to Read the pre-processed file before
continuing. This may be useful at startup if you use a session manager
as Gnome. Also, this is useful if you want to process and run a Form in
a fvwm function.

.IP -noread
Causes the pre-processed file to be not read by fvwm. Useful to
pre-process a FvwmScript script with FvwmCpp.

.SH CONFIGURATION OPTIONS
FvwmCpp defines some values for use in the pre-processor file:

.IP TWM_TYPE
Always set to "fvwm".
.IP SERVERHOST
The name of the machine running the X Server.
.IP CLIENTHOST
The name of the machine running fvwm.
.IP HOSTNAME
The host name of the machine running fvwm. Generally the same as CLIENTHOST.
.IP OSTYPE
The operating system for CLIENTHOST.
.IP USER
The name of the person running fvwm.
.IP HOME
The home directory of the person running fvwm.
.IP VERSION
The X11 version.
.IP REVISION
The X11 revision number.
.IP VENDOR
The X server vendor.
.IP RELEASE
The X server release number.
.IP SCREEN
The screen number.
.IP WIDTH
The screen width in pixels.
.IP HEIGHT
The screen height in pixels.
.IP X_RESOLUTION
Some distance/pixel measurement for the horizontal direction, I think.
.IP Y_RESOLUTION
Some distance/pixel measurement for the vertical direction, I think.
.IP PLANES
Number of color planes for the X server display
.IP BITS_PER_RGB
Number of bits in each rgb triplet.
.IP CLASS
The X11 default visual class, e.g. PseudoColor.
.IP COLOR
Yes or No, Yes if the default visual class is neither StaticGrey or GreyScale.
.IP FVWM_CLASS
The visual class that fvwm is using, e.g. TrueColor.
.IP FVWM_COLOR
Yes or No, Yes if the FVWM_CLASS is neither StaticGrey or GreyScale.
.IP FVWM_VERSION
The fvwm version number, ie 2.0
.IP OPTIONS
Some combination of SHAPE, XPM, NO_SAVEUNDERS, and Cpp, as defined in
configure.h at compile time.
.IP FVWM_MODULEDIR
The directory where fvwm looks for .fvwm2rc and modules by default, as
determined at compile time.
.IP FVWM_USERDIR
The value of $FVWM_USERDIR.
.IP SESSION_MANAGER
The value of $SESSION_MANAGER. Undefined if this variable is not set.

.SH EXAMPLE PROLOG

.EX
#define TWM_TYPE fvwm
#define SERVERHOST spx20
#define CLIENTHOST grumpy
#define HOSTNAME grumpy
#define OSTYPE SunOS
#define USER nation
#define HOME /local/homes/dsp/nation
#define VERSION 11
#define REVISION 0
#define VENDOR HDS human designed systems, inc. (2.1.2-D)
#define RELEASE 4
#define SCREEN 0
#define WIDTH 1280
#define HEIGHT 1024
#define X_RESOLUTION 3938
#define Y_RESOLUTION 3938
#define PLANES 8
#define BITS_PER_RGB 8
#define CLASS PseudoColor
#define COLOR Yes
#define FVWM_VERSION 2.0 pl 1
#define OPTIONS SHAPE XPM Cpp
#define FVWM_MODULEDIR /local/homes/dsp/nation/modules
#define FVWM_USERDIR /local/homes/dsp/nation/.fvwm
#define SESSION_MANAGER local/grumpy:/tmp/.ICE-unix/440,tcp/spx20:1025
.EE

.SH BUGS
Module configurations do not become active until fvwm has restarted
if you use FvwmCpp on startup. FvwmCpp creates a temporary file
and passes this to fvwm, so you would have to edit this file too.
There are some problems with comments in your .fvwm2rc file.
The comment sign # is misinterpreted by the preprocessor.
This has usually no impact on functionality but generates
annoying warning messages.
The sequence /* is interpreted as the start of a C comment what
is probably not what you want in a filename. You might want to try
/?* (for filenames only) or /\\* or "/*" instead. Depending on
your preprocessor you may have the same problem with "//".
Macros are not replaced within single (') or double quotes (\"). Use
back quotes (`) to circumvent this. Fvwm accepts back quotes for
quoting and at least FvwmButtons does too.
The preprocessor may place a space after a macro substitution, so
with
.EX
#define MYCOMMAND ls
"Exec "MYCOMMAND" -l"
.EE
you might get
.EX
"Exec "ls " -l" (two words)
.EE
and not
.EX
"Exec "ls" -l" (one word).
.EE

If you use gcc you can use this invocation to turn off '//'
comments:

.EX
FvwmCpp -Cppprog '/your/path/to/gcc -C -E -' <filename>
.EE

.SH AUTHOR
FvwmCpp is the result of a random bit mutation on a hard disk,
presumably a result of a  cosmic-ray or some such thing.
